package clases;
import java.io.Serializable;
import java.security.InvalidParameterException;
import java.util.ArrayList;
import java.util.LinkedList;
import java.util.Queue;
import java.util.TreeSet;




public class Grafo implements Serializable{
	
	private static final long serialVersionUID = 1L;
	//cantidad de vertices
	private int n;
	
	private ArrayList<TreeSet<Integer>>vecinos;
	
	//constructor cantidad de vertices
	public Grafo (int vertices){
		n= vertices;
		vecinos = new ArrayList<TreeSet<Integer>>(n); // capacidad inicial =n;
		for(int i=0; i<n; i++){
			vecinos.add(new TreeSet<Integer>());
			
		}
	}
	//  agrega arista (los verices empiezan desde cero)
	public void agregarArista(int i, int j){
		if (i < 0 || i > n || j < 0 || j > n)
			throw new InvalidParameterException("PARAMETRO MAL");
		vecinos.get(i).add(j);
		vecinos.get(j).add(i);
		
	}
	
	public void borrarArista(int i, int j){
		vecinos.get(i).remove(j);
		vecinos.get(j).remove(i);
	}
	
	public boolean sonVecinos(int i, int j){
		if (i < 0|| i > n || j < 0 || j > n)
			throw new InvalidParameterException("PARAMETRO MAL");
		
		return vecinos.get(i).contains(j);
	}
	
	//  cantidad de  vecinos
	public int grado(int i){
		if (i < 0 || i > n )
			throw new InvalidParameterException("PARAMETRO MAL");
		return vecinos.get(i).size();
	}
	
	public TreeSet<Integer> losVecinos(int vertice){
		return vecinos.get(vertice);
		
	}
	
	
	public boolean[] bfs(Integer origen){
		
		Queue<Integer> l = new LinkedList<Integer>();
		
		boolean[] marcado = new boolean [n];
		
		marcado[origen]=true;
		
		l.offer(origen);
		
		while(!l.isEmpty()){
			Integer vert = l.poll();
			
			for(Integer v : losVecinos(origen) ){
				if (marcado[v] == false){
					l.add(v);		
				}
				marcado[vert]=true;
			}
		}
		
		return marcado;
	}
	
	
	
	
	public boolean esConexo(boolean arr[]){
		boolean ret = true;
		for (int i = 0; i <arr.length; i++){
			if(arr[i] == false){
				ret = false;

			}
		}
		return true && ret;
	}
	
	public static void main(String[] args) {
		
	
		
		
	}

}
